Robots may require processing of information from various sources to interact with environments. For example, a robot may obtain sensory measurements from sensors which are processed by one or more processing modules to extract useful features or reconstruct the surrounding environment. Information of the extracted features or the reconstructed environment may then be accessed by other processing modules to perform other meaningful tasks such as controlling the effectors of the robot (e.g., motors, speakers, and actuators). Sometimes, a series of processing must be performed at different processing modules in a complex sequence to perform a meaningful task.
Modular design approaches may be used to implement a robot that performs various tasks. In this approach, a complex task may be broken down to smaller and more manageable tasks. Then multiple processing modules may be designed and developed to address the smaller tasks that are part of the complex task. A series of processing may be performed at different processing modules using information generated by other processing modules. The modular design approaches may also reduce duplicative efforts in programming a robot because a processing module may be reusable to perform more than one task.
In robots with such multiple modules, the information must be exchanged in an efficient and coordinated manner. As the number of modules increase and the tasks become more complicated, the amount of information exchanged between the modules also increases. One way to manage the increased number of processing modules and the increased amount of information exchanged is a publish-subscribe architecture based blackboard system. In the blackboard system, information from a source is not sent directly to a receiving module. Instead, the information from a source is stored and made accessible (i.e., published) on a shared repository. The receiving module subscribes to the published information from the shared repository. The receiving module may also publish information on the shared repository that may be subscribed by other modules.
The computational capabilities of computers in a robot are usually limited because of constraints such as energy consumption and heat management. Therefore, instead of placing all the modules in a central computer, modules may be distributed across multiple computers or hardware devices located in different parts of the robot. By distributing the modules, the computational demands of a task can be shared across multiple computers or hardware devices. Each module may be responsible for less demanding portions of tasks; and therefore, avoid or alleviate excessive computational delays at the central computer. Further, different software environments, operating systems and programming languages may be used for each module in the distributed system to increase flexibility of the robot system.